import os

from dotenv import load_dotenv
from sqlalchemy.orm import Session
from sqlalchemy import select
from ..models.ppts_model import Ppts
from ..utils.uploads_oss import main as upload_on_oss
from fastapi import HTTPException

load_dotenv()
SOURCES_PATH=os.getenv("SOURCES_PATH")
def create_ppt(db: Session, name: str, path: str = None):
    """
    创建一个新的 PPT 记录。

    :param db: 数据库会话
    :param name: PPT 名称
    :param path: PPT 存储路径（可选）
    :return: 创建的 PPT 对象
    """
    if db.execute(select(Ppts).where(Ppts.name ==name)).scalars().first():
        raise HTTPException(status_code=400,detail="ppt已存在")
    file_path=os.path.join(SOURCES_PATH, path)
    upload_on_oss(key=path,file_path=file_path)
    db_ppt = Ppts(name=name, path=path,
                  oss_url="http://whatteam1.oss-cn-beijing.aliyuncs.com/"+path)
    db.add(db_ppt)
    db.commit()
    db.refresh(db_ppt)
    return db_ppt


def get_all_ppts(db: Session):
    """
    获取所有 PPT 记录。

    :param db: 数据库会话
    :return: 所有 PPT 列表
    """
    return db.query(Ppts).all()


def get_ppt_by_id(db: Session, ppt_id: int):
    """
    根据 ID 获取特定的 PPT 记录。

    :param db: 数据库会话
    :param ppt_id: PPT 的唯一标识
    :return: PPT 对象或 None
    """
    result=db.query(Ppts).filter(Ppts.id == ppt_id).first()
    if not result:
        return HTTPException(status_code=404, detail="PPT not found")
    return result.as_dict()


def update_ppt(db: Session, ppt_id: int, name: str = None, path: str = None):
    """
    更新指定 ID 的 PPT 记录。

    :param db: 数据库会话
    :param ppt_id: 要更新的 PPT 的 ID
    :param name: 新名称（可选）
    :param path: 新路径（可选）
    :return: 更新后的 PPT 对象
    """
    db_ppt = db.query(Ppts).filter(Ppts.id == ppt_id).first()
    if not db_ppt:
        return None

    if name:
        db_ppt.name = name
    if path:
        db_ppt.path = path

    db.commit()
    db.refresh(db_ppt)
    return db_ppt.as_dict()


def delete_ppt_by_id(db: Session, ppt_id: int):
    """
    删除指定 ID 的 PPT 记录。

    :param db: 数据库会话
    :param ppt_id: 要删除的 PPT 的 ID
    :return: 成功返回 True，失败返回 False
    """
    db_ppt = db.query(Ppts).filter(Ppts.id == ppt_id).first()
    if not db_ppt:
        raise HTTPException(status_code=404, detail="PPT not found")

    db.delete(db_ppt)
    db.commit()
    return db_ppt.as_dict()

def update_oss_urls(db: Session):
    try:
        # 查询所有视频记录
        videos = db.query(Ppts).all()

        # 遍历每个视频记录，更新 oss_url
        for video in videos:
            if video.path:  # 确保 path 不为空
                video.oss_url = f"http://whatteam1.oss-cn-beijing.aliyuncs.com/{video.path}"

        # 提交事务
        db.commit()

        return {"message": "OSS URLs updated successfully"}

    except Exception as e:
        db.rollback()  # 回滚事务
        raise HTTPException(status_code=500, detail=str(e))

# if __name__ == '__main__':
#     from database.db import SessionLocal
#     db = SessionLocal()
#     update_oss_urls(db)